package com.lgl.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.lgl.dto.TagListDto;
import com.lgl.dto.UpdateTagDto;
import com.lgl.entity.ResponseResult;
import com.lgl.entity.Tag;
import com.lgl.mapper.TagMapper;
import com.lgl.service.TagService;
import com.lgl.utils.BeanCopyUtils;
import com.lgl.vo.ListAllTagVo;
import com.lgl.vo.PageVo;
import com.lgl.vo.TagVo;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.util.List;

@Service
public class TagServiceImpl extends ServiceImpl<TagMapper, Tag> implements TagService {

    @Override
    public ResponseResult list(Integer pageNum, Integer pageSize, String name, String remark) {
// 	为了方便后期对文章进行管理，需要提供标签的功能，一个文章可以有多个标签。
        Page<Tag> tagPage = new Page<>();
        tagPage.setSize(pageSize.longValue());
        tagPage.setCurrent(pageNum.longValue());
        LambdaQueryWrapper<Tag> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(StringUtils.hasText(name),Tag::getName,name);
        queryWrapper.eq(StringUtils.hasText(remark),Tag::getRemark,remark);
        Page<Tag> page = page(tagPage, queryWrapper);
        List<Tag> records = page.getRecords();
        List<TagVo> tagVos = BeanCopyUtils.copyBeanList(records, TagVo.class);
        PageVo pageVo = new PageVo(tagVos, page.getTotal());

// 在后台需要分页查询标签功能，要求能根据标签名进行分页查询。 **后期可能会增加备注查询等需求**。
//
//注意：不能把删除了的标签查询出来。
        return ResponseResult.okResult(pageVo);
    }

    @Override
    public ResponseResult addTag(Tag tag) {
        save(tag);
        return ResponseResult.okResult();
    }

    @Override
    public ResponseResult deleteTag(Long id) {
        removeById(id);
        return ResponseResult.okResult();
    }

    @Override
    public ResponseResult getTagDetails(Long id) {
        Tag tag = getById(id);
        TagVo tagVo = BeanCopyUtils.beanCopy(tag, TagVo.class);
        return ResponseResult.okResult(tagVo);
    }

    @Override
    public ResponseResult UpdateTag(UpdateTagDto updateTagDto) {
        Tag tag = BeanCopyUtils.beanCopy(updateTagDto, Tag.class);
        updateById(tag);
        return ResponseResult.okResult();
    }

    @Override
    public ResponseResult listAllTag() {
        List<Tag> tagList = list();
        List<ListAllTagVo> listAllTagVos = BeanCopyUtils.copyBeanList(tagList, ListAllTagVo.class);

        return ResponseResult.okResult(listAllTagVos);
    }
}

